package com.hy;

import java.util.Stack;

/**
 * Created With IntelliJ IDEA.
 * Descriptions:
 * <p>
 * User:Mr.Du
 * Date:2024/1/24
 * Time:9:41
 */
public class CalculateI {

    public int calculate(String s) {
        Stack<Integer> stk = new Stack<>();
        s = s.replaceAll(" ", "");
        // 记录算式中的数字
        int num = 0;
        // 记录 num 前的符号，初始化为 +
        char sign = '+';
        for (int i = 0; i < s.length(); i++) {
            char c = s.charAt(i);
            if(c =='(' || c == ')') continue;
            // 如果是数字，连续读取到 num
            if (Character.isDigit(c))
                num = 10 * num + (c - '0');
            // 如果不是数字，就是遇到了下一个符号，
            // 之前的数字和符号就要存进栈中
            if (!Character.isDigit(c) || i == s.length() - 1) {
                switch (sign) {
                    case '+':
                        stk.push(num); break;
                    case '-':
                        stk.push(-num); break;
                }
                // 更新符号为当前符号，数字清零
                sign = c;
                num = 0;
            }
        }
        // 将栈中所有结果求和就是答案
        int res = 0;
        while (!stk.empty()) {
            res += stk.pop();
        }
        return res;
    }

    public static void main(String[] args) {
        CalculateI calculate = new CalculateI();
        String s = "(1+(4+5+2)-3)+(6+8)";
        int calculate1 = calculate.calculate(s);
        System.out.println(calculate1);
    }
}
